package api

import (
	"github.com/labstack/echo/v4"
	global2 "longmen/server/config/global"
	string2 "longmen/server/pkg/common/helper/string"
	"longmen/server/pkg/common/helper/util"
	"longmen/server/pkg/grpc_client"
	"longmen/server/pkg/protobuf"
)

// @Summary 新闻或头条列表
// @Description 新闻或头条列表
// @Accept  json
// @Produce  json
// @Tags News
// @Param   sendBody body api_models.GetNewsListReq true "body"
// @Success 200 {object} api_models.GetNewsResp "result"
// @Router /api/news/getNewsList [POST]
func (base *Controller) GetNewsList(c echo.Context) error {
	r := &protobuf.GetNewsListReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	r.Page = uint32(string2.GetDefaultNum(int(r.Page), 1))
	r.Size = uint32(string2.GetDefaultNum(int(r.Size), 10))
	r.Source = uint32(base.GetPlatform(c))
	global2.Log.Debugf("GetNewsList API Platform:%v,r.Source：%v", base.GetPlatform(c), r.Source)
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.GetNewsList(ctx, r)
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp.NewsProfile, "")
}

func (base *Controller) Get55LiveNewsList(c echo.Context) error {
	r := &protobuf.GetNewsListReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	r.Page = uint32(string2.GetDefaultNum(int(r.Page), 1))
	r.Size = uint32(string2.GetDefaultNum(int(r.Size), 10))
	r.Source = 1
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.GetNewsList(ctx, r)
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp.NewsProfile, "")
}

// @Summary 新闻类别或头条类别列表
// @Description 新闻类别或头条类别列表
// @Accept  json
// @Produce  json
// @Tags News
// @Success 200 {object} models_main.NewsCategory "result"
// @Router /api/news/getNewsCategoryList [POST]
func (base *Controller) GetNewsCategoryList(c echo.Context) error {
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.GetNewsCategoryList(ctx, &protobuf.Empty{})
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp.NewsCategory, "")
}

// @Summary 通过新闻Id获取新闻详情
// @Description 通过新闻Id获取新闻详情
// @Accept  json
// @Produce  json
// @Tags News
// @Param   sendBody body api_models.GetNewsByIdReq true "body"
// @Success 200 {object} api_models.GetNewsByIdResp "result"
// @Router /api/news/getNewsById [POST]
func (base *Controller) GetNewsById(c echo.Context) error {
	r := &protobuf.GetNewsByIdReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.GetNewsById(ctx, r)
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 获取轮播图信息
// @Description 获取轮播图信息
// @Accept  json
// @Produce  json
// @Tags News
// @Param   sendBody body protobuf.GetBannerReq true "body"
// @Success 200 {object} api_models.GetBannerResp "result"
// @Router /api/news/getNewsBannerList [POST]
func (base *Controller) GetNewsBannerList(c echo.Context) error {
	r := &protobuf.GetBannerReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	r.Device = int32(base.GetPlatform(c))
	resp, err := grpc_client.GrpcSportServer.GetNewsBannerList(ctx, r)
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp.Banner, "")
}

// @Summary 在新闻详情页中的推荐新闻
// @Description 在新闻详情页中的推荐新闻
// @Accept  json
// @Produce  json
// @Tags News
// @Success 200 {object} api_models.GetNewsResp "result"
// @Router /api/news/getRecommenedNewsList [POST]
func (base *Controller) GetRecommenedNewsList(c echo.Context) error {
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.GetRecommendNewsList(ctx, &protobuf.Empty{})
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp.NewsProfile, "")
}
